#include <iostream>
#include <fstream>
#include <filesystem>
#include "keyword_processor.hpp"

namespace fs = std::filesystem;

// 辅助函数：检查文件是否存在
bool file_exists(const std::string& path) {
    return fs::exists(path) && fs::file_size(path) > 0;
}

// 辅助函数：从词典文件查找词频
int get_word_count(const std::string& dict_path, const std::string& word) {
    std::ifstream dict(dict_path);
    std::string line;
    while (std::getline(dict, line)) {
        size_t pos = line.find(' ');
        if (pos != std::string::npos && line.substr(0, pos) == word) {
            return std::stoi(line.substr(pos + 1));
        }
    }
    return 0;
}

int main() {
    // 1. 创建临时测试目录和文件
    const std::string test_cn_dir = "test_cn_corpus/";
    const std::string test_en_dir = "test_en_corpus/";
    fs::create_directories(test_cn_dir);
    fs::create_directories(test_en_dir);

    // 2. 写入测试内容
    std::ofstream cn_file(test_cn_dir + "test.txt");
    cn_file << "这是一个测试文件，包含关键词测试和停用词的验证。";
    cn_file.close();

    std::ofstream en_file(test_en_dir + "test.txt");
    en_file << "This is a test file with example content and stop words.";
    en_file.close();

    // 3. 执行关键词处理
    KeyWordProcessor processor;
    processor.process(test_cn_dir, test_en_dir);

    // 4. 验证结果
    bool success = true;

    // 验证文件生成
    if (!file_exists("resources/dict/cn_dict.txt")) {
        std::cerr << "错误：中文词典文件未生成\n";
        success = false;
    }
    if (!file_exists("resources/dict/en_dict.txt")) {
        std::cerr << "错误：英文词典文件未生成\n";
        success = false;
    }

    // 验证中文关键词
    int cn_count = get_word_count("resources/dict/cn_dict.txt", "测试");
    if (cn_count != 2) {
        std::cerr << "错误：中文关键词计数异常（预期2，实际" << cn_count << ")\n";
        success = false;
    }

    // 验证英文关键词
    int en_count = get_word_count("resources/dict/en_dict.txt", "example");
    if (en_count != 1) {
        std::cerr << "错误：英文关键词计数异常（预期1，实际" << en_count << ")\n";
        success = false;
    }

    // 验证停用词过滤
    int stop_count = get_word_count("resources/dict/en_dict.txt", "is");
    if (stop_count > 0) {
        std::cerr << "错误：停用词未过滤（is计数" << stop_count << ")\n";
        success = false;
    }

    // 5. 清理临时文件
    fs::remove_all(test_cn_dir);
    fs::remove_all(test_en_dir);

    if (success) {
        std::cout << "所有测试通过！\n";
        return 0;
    } else {
        std::cout << "测试失败\n";
        return 1;
    }
}